﻿<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="B编码" />
<meta name="filter" content="通信协议" />
<meta name="path" content="/通信协议/BT" />
<meta name="location" content="BT" />
<meta name="author" content="BT" />
<title>B编码</title>
</head>
<body>
<h3>B编码</h3>
<p>B编码 是一种以简洁的格式描述和组织数据的方法。支持下列类型：字节串、整数、lists(列表)和dictionaries（字典）。</p>
<p><br>
  <strong>编码规则如下：字节串</strong></p>
<p>字节串按如下方式编码：<span style="color: #F00; font-weight: bold;">&lt;以十进制ASCII编码的串长度&gt;：&lt;串数据&gt;</span><br>
<strong>注意：</strong>字节串编码没有开始和结束分隔符。</p>
<p>例：4:spam表示字节串&ldquo;spam&rdquo;</p>
<p><br>
  <br>
  <strong>整数</strong>
</p>
<p>整数按如下方式编码：<span style="color: #F00; font-weight: bold;"><strong><em>i</em></strong>&lt;以十进制ASCII编码的整数&gt;<strong><em>e</em></strong></span><br>
  开始的&ldquo;<strong>i</strong>&rdquo;与结尾的&ldquo;<strong>e</strong>&rdquo;分别是开始和结束分隔符。可以使用如&ldquo;<strong><em>i</em></strong>-3<em><strong>e</strong></em>&rdquo;之类的负数。但是你不能把&ldquo;0&rdquo;放到数字的前面，如&ldquo;<strong><em>i</em></strong>04<strong><em>e</em></strong>&rdquo;。另外，&ldquo;<strong><em>i</em></strong>0<strong><em>e</em></strong>&rdquo;是有效的。<br>
例：&ldquo;<strong><em>i</em></strong>3<strong><em>e</em></strong>&rdquo;表示整数&ldquo;3&rdquo;</p>
<p><strong>注意：</strong>对于这个整数的最大位数规范并没有做出规定，（待译）</p>
<br>
<br>
<strong>lists（列表）</strong>
<p>lists按如下方式编码：<span style="color: #F00; font-weight: bold;"><strong><em>l</em></strong>&lt;B编码值&gt;<strong><em>e</em></strong></span><br>
  开始的&ldquo;<strong><em>l</em></strong>&rdquo;(<strong><em>l</em></strong>是小写的L，而不是大写的i)与结尾的&ldquo;<strong><em>e</em></strong>&rdquo;分别是开始和结束分隔符。lists可以包含任何B编码的类型，包括整数、串、dictionaries和其他的lists。<br>
例：<strong><em>l</em></strong>4:spam4:eggs<strong><em>e</em></strong>&nbsp;表示含有两个串的lists:[&ldquo;spam&rdquo;、&ldquo;eggs&rdquo;]</p>
<br>
<br>
<strong>dictionaries（字典）</strong>
<p>dictionaries按如下方式编码：<span style="color: #F00; font-weight: bold;"><strong><em>d</em></strong>&lt;B编码串&gt;&lt;B编码元素&gt;<strong><em>e</em></strong></span><strong><em><br>
  </em></strong>开  始的&ldquo;d&rdquo;与结尾的&ldquo;e&rdquo;分别是开始和结束分隔符。   注意键（key）必须被B编码为串。值可以是任何B编码的类型，包括整数、串、lists和其他的dictionaries。键（key）必须是串，并且  以排序的顺序出现（以原始串排列，而不是以字母数字顺序）。串采用二进制比较方式，而不是特定于某种文化的自然比较（即既不是按照中文的比较方式，也不是  按照英文的排序方式）。<br>
  例1：<strong><em>d</em></strong>3:cow3:moo4:spam4:eggs<strong><em>e</em></strong>&nbsp;表示dictionary { "cow" =&gt; "moo", "spam" =&gt; "eggs" }<br>
例2：<strong><em>d</em></strong>4:spam<strong><em>l</em></strong>1:a1:b<strong><em>ee</em></strong>&nbsp;表示dictionary { "spam" =&gt; ["a", "b"] }</p>
<p>例3：<em><strong>d</strong>9:publisher3:bob17:publisher-webpage15:www.example.com18:publisher.location4:home<strong>e</strong></em>表示dictionary&nbsp; { "publisher" =&gt; "bob", "publisher-webpage" =&gt; "www.example.com", "publisher.location" =&gt; "home" }</p>
<p>(译者注：对于string和integer，目前已经存在官方的翻译，但是list和dictionary并没有存在一个统一的译法，在此以原文示之，相信学过Java和c#的人不会对这两个术语感到陌生)</p>
<p><br>
</p>
</body>
</html>
